package cn.thinkluck.pattern.templatemethod;

import lombok.extern.slf4j.Slf4j;

/**
 * 模板类
 *
 * @Author liutao
 * @DateTime 2024/7/31 下午10:45
 */
@Slf4j
public abstract class AbstractTemplate {
    /**
     * 1.定义算法模板骨架，理论上算法骨架不应该能被重写
     */
    public final void template() {
        //2.算法骨架中包含算法步骤
        step1();
        step2();
        step3();
    }

    /**
     * 步骤1
     * 提供默认实现
     */
    public void step1() {
        log.info("步骤1(默认实现)");
    }

    /**
     * 步骤2
     * 要求必须子类实现
     */
    public abstract void step2();

    /**
     * 步骤3
     * 提供默认实现
     */
    public void step3() {
        log.info("步骤3(默认实现)");
    }
}
